To begin the analysis, I first just read in the tidy NDD data we were sent.
## read data in
df <- readxl::read_excel("NDD_Tidy_v4.xlsx")
To detect differences between groups, we first defined whether or not a sample was healthy or diseased, disregarding which disease the same was. Then, to display differences between groups, I split the data up by which measurement was taken. Below, we visually see the differences between healthy and disease groups for each measurement. Visually, the plots display the most obvious differenc between groups with the TEER measurement.
## create disease vector
df <- df %>%
mutate(dx = ifelse(Disease=="Healthy","Healthy","Disease"))
## take a look at Values within Measurement plot
ggplot(aes(x=dx,y=Value),data=df) +
geom_jitter(colour="gray48") +
geom_violin(alpha=0.4) +
facet_wrap(~ Measurement, scales="free_y") +
theme(axis.text=element_text(size=16),
axis.title=element_text(size=18),strip.text = element_text(size=16)) +
labs(x="")
To formalize this analysis, we run a t-test for each measurement between groups. Below, the table is sorted by effect size (statistic). The mean value for each group is also included. The last two columns summarize significance, with the final column containing an adjusted p-value. This adjusts for the number of variables tested.
Note: this adjustment should potentially take into account the other variables initially tested. Happy to discuss this, if this is actually a table/value you end up presenting or making decisions based on.
## calculate t.test
t_measurement <- function(x){
a <- df %>% filter(Measurement==x)
output <- t.test(Value ~ dx, data=a)
out = data.frame(statistic=output$statistic,
mean_dx = output$estimate[1],
mean_healthy = output$estimate[2],
p.value = output$p.value)
rownames(out) <- x
return(out)
}
## get output table
measurements <- unique(df$Measurement)
final = c()
for(i in 1:length(measurements)){
b <- t_measurement(measurements[i])
final = rbind(final,b)
}
final <- final[order(abs(final$statistic),decreasing=TRUE),]
final$p.value.adj = final$p.value*nrow(final)
kable(final,digits=3) %>%
kable_styling()
| statistic | mean_dx | mean_healthy | p.value | p.value.adj | |
|---|---|---|---|---|---|
| TEER | -18.773 | 1172.354 | 2140.320 | 0.000 | 0.000 |
| ER | -6.660 | 0.992 | 2.458 | 0.000 | 0.000 |
| Dglucose | -3.827 | 0.000 | 0.000 | 0.002 | 0.010 |
| LY | 2.297 | 0.000 | 0.000 | 0.029 | 0.115 |
To better understand these data in aggregate, we’ll carry out a cluster analysis. First, we’ll visualize the data to determine if clustering makes sense, and then we’ll carry out the clustering.
Here, for each replicate, we’ve compiled the measures taken for each sample. Each row was a different sample and then the columns included the values for each of the different measurements taken for that sample. These data were then plotted. These plot is interactive, so you can adjust the view of the axes and play around with the plot to see the differences between groups.
The three variables with significant differences by t-test were included for visualization: Dglucose, ER, and TEER.
Only those samples with measurements for all three variables will be plotted. While only some of the data are plotted here, it becomes clear visually that, at least for these samples, the functional measurements differ between healthy and diseased cells.
df_cluster <- df %>%
mutate(Replicate = replace(Replicate, is.na(Replicate), 1)) %>%
mutate(cell_line=`Cell line`) %>%
select(cell_line, Measurement,Value, Differentiation, Replicate,dx) %>%
melt(.,id.vars=c("cell_line","Measurement","Differentiation","Replicate", "dx")) %>%
mutate(identifier = paste(cell_line,Replicate,dx,sep=".")) %>%
mutate(id = paste(cell_line,Differentiation,dx,sep=".") ) %>%
spread(.,key=Measurement,value=value,fill=NA) %>%
clean_names()
p <- plot_ly(df_cluster, x = ~dglucose, y = ~er, z = ~teer, color = ~dx, colors = c('#BF382A', '#0C4B8E')) %>%
add_markers() %>%
layout(scene = list(xaxis = list(title = 'Dglucose'),
yaxis = list(title = 'ER'),
zaxis = list(title = 'TEER')))
p
Below, we run a cluster anlaysis, generating two clusters. Here, we’ll be able to see if the healthy cells are separating out from the disease cells.
Additionally, here we report how many samples are in each cluster.
dat <- df_cluster[,c(8:ncol(df_cluster))]
nclust = 2
clus <- KMeans(data = dat, centers = nclust)
## plot K-Means summary
table(clus$cluster)
##
## Cluster 1 Cluster 2
## 257 285
## make summary tables for below
out_dx = cbind( round(t(table(clus$cluster,df_cluster$dx))/as.numeric(table(df_cluster$dx))*100,1), N= as.numeric(table(df_cluster$dx)))
out_sample = cbind( round(t(table(clus$cluster,df_cluster$id))/as.numeric(table(df_cluster$id))*100,1), N= as.numeric(table(df_cluster$id)))
out_cell_line = cbind( round(t(table(clus$cluster,df_cluster$cell_line))/as.numeric(table(df_cluster$cell_line))*100,1), N= as.numeric(table(df_cluster$cell_line)))
To visualize these data, we’ll again look at those samples where complete data is available. In the plots below, the colors correspond to the clusters, not healthy vs. disease. Cluster 1 is in blue; Cluster 2 in orange.
# to look at clusters generated
with(df_cluster, pairs(dat, col=c("blue", "orange")[clus$cluster], cex=2, pch=19, cex.axis=1.5))
A reminder, these plots only include the 33 samples with values for all four measurements, so it should be interpreted with a grain of salt. However, the TEER measurements are generally driving the clustering, with ER also separating out the two clusters fairly well.
By first glance we see that cluster 2 contains most of the healthy samples. Cluster 1 has a majority of the disease samples; however, there are a number of disease samples in Cluster 2. We’ll investigate this further blow.
Note, the numbers in these figures are percentages of each row in the respective cluster (sum in each row is 100%). The precie number of samples in each row that contributed to this percentage can be seen in the column ‘N’ in the table below the figure. Grey are lower numbers, white are the middle and red are the highest proportions.
# brewer.pal(8,"RdBu"))
gplots::heatmap.2(x = out_dx[,1:nclust], Rowv = FALSE, Colv = FALSE, dendrogram = "none",
cellnote = out_dx, notecol = "black", notecex = 1.5,
trace = "none", key = TRUE, margins = c(7, 11),
col = colorRampPalette(c("gray48", "white", "red")),
cexRow=1.7, cexCol=1.7)
kable(as.data.frame(out_dx),digits=2, "html") %>%
kable_styling()
| Cluster 1 | Cluster 2 | N | |
|---|---|---|---|
| Disease | 61.6 | 38.4 | 414 |
| Healthy | 1.6 | 98.4 | 128 |
Below, we’ll try to understand which disease samples are clustering with the healthy samples. Here, we’ve allowed the rows to reorder based on their cluster proportion. So, we see that the healthy cell lines (BC1, iPS12, and WT2) are almost eclusively in Cluster 2; however, AD6 (which we know behaves more similarly to healthy cells) and SCNA1 are also predominantly in this cluster. For the disease cluster, SODA4V, JH033, and HD50 cluster almost exclusively with Cluster 1. There is more variability with SCNAT, AD10, and HD71.
gplots::heatmap.2(x = out_cell_line[,1:nclust], Colv = FALSE, Rowv = FALSE, dendrogram = 'none',
cellnote = out_cell_line, notecol = "black", notecex = 1.2,
trace = "none", key = TRUE, margins = c(7, 11), col = colorRampPalette(c("gray48", "white", "red")),cexRow=1.5, cexCol=1.5)
kable(as.data.frame(out_cell_line),digits=2, "html") %>%
kable_styling() %>%
scroll_box(width = "100%", height = "200px")
| Cluster 1 | Cluster 2 | N | |
|---|---|---|---|
| AD10 | 75.6 | 24.4 | 41 |
| AD6 | 16.7 | 83.3 | 60 |
| BC1 | 3.3 | 96.7 | 30 |
| HD50 | 97.9 | 2.1 | 48 |
| HD71 | 45.5 | 54.5 | 55 |
| iPS12 | 0.0 | 100.0 | 44 |
| JH033 | 100.0 | 0.0 | 43 |
| SCNA1 | 4.3 | 95.7 | 47 |
| SCNAT | 67.1 | 32.9 | 70 |
| SODA4V | 100.0 | 0.0 | 50 |
| WT2 | 1.9 | 98.1 | 54 |
Finally, we’ve clustered by sample just in case we’re interested in determining exactly which sample is driving the results we see above. Again, we’ve allowed the data to cluster by row, as seen in the dendrogram at left in the plot. This allows us to quickly see which cell lines/differentiations are not exclusively in one of the clusters. For example, we see at the bottom of the diagram that HD71.1, AD6.1, and SCNAT.2 are the cell lines with samples in both Cluster 1 and Cluster 2. (Note: the number after the decimal in the row ID “HD71.1” is the differentiation number.)
col1 <- brewer.pal(11,"Paired")
gplots::heatmap.2(x = out_sample[,1:nclust], Colv = FALSE, dendrogram = "row",
cellnote = out_sample, notecol = "black",
trace = "none", key = TRUE, margins = c(7, 11), col = colorRampPalette(c("gray48", "white", "red")), cexCol=1.5)
# RowSideColors=col1[as.numeric(mydf$category)])
kable(as.data.frame(out_sample),digits=2, "html") %>%
kable_styling() %>%
scroll_box(width = "100%", height = "200px")
| Cluster 1 | Cluster 2 | N | |
|---|---|---|---|
| AD10.1.Disease | 100.0 | 0.0 | 11 |
| AD10.2.Disease | 100.0 | 0.0 | 6 |
| AD10.3.Disease | 9.1 | 90.9 | 11 |
| AD10.4.Disease | 100.0 | 0.0 | 11 |
| AD10.5.Disease | 100.0 | 0.0 | 1 |
| AD10.6.Disease | 100.0 | 0.0 | 1 |
| AD6.1.Disease | 63.6 | 36.4 | 11 |
| AD6.2.Disease | 18.2 | 81.8 | 11 |
| AD6.3.Disease | 16.7 | 83.3 | 6 |
| AD6.4.Disease | 0.0 | 100.0 | 20 |
| AD6.5.Disease | 0.0 | 100.0 | 12 |
| BC1.1.Healthy | 33.3 | 66.7 | 3 |
| BC1.2.Healthy | 0.0 | 100.0 | 4 |
| BC1.3.Healthy | 0.0 | 100.0 | 5 |
| BC1.4.Healthy | 0.0 | 100.0 | 5 |
| BC1.5.Healthy | 0.0 | 100.0 | 5 |
| BC1.6.Healthy | 0.0 | 100.0 | 3 |
| BC1.7.Healthy | 0.0 | 100.0 | 5 |
| HD50.1.Disease | 100.0 | 0.0 | 11 |
| HD50.2.Disease | 100.0 | 0.0 | 11 |
| HD50.3.Disease | 95.7 | 4.3 | 23 |
| HD50.4.Disease | 100.0 | 0.0 | 1 |
| HD50.5.Disease | 100.0 | 0.0 | 1 |
| HD50.6.Disease | 100.0 | 0.0 | 1 |
| HD71.1.Disease | 72.7 | 27.3 | 11 |
| HD71.2.Disease | 0.0 | 100.0 | 11 |
| HD71.3.Disease | 27.3 | 72.7 | 22 |
| HD71.4.Disease | 100.0 | 0.0 | 11 |
| iPS12.1.Healthy | 0.0 | 100.0 | 10 |
| iPS12.2.Healthy | 0.0 | 100.0 | 11 |
| iPS12.3.Healthy | 0.0 | 100.0 | 11 |
| iPS12.4.Healthy | 0.0 | 100.0 | 12 |
| JH033.1.Disease | 100.0 | 0.0 | 11 |
| JH033.2.Disease | 100.0 | 0.0 | 12 |
| JH033.3.Disease | 100.0 | 0.0 | 10 |
| JH033.4.Disease | 100.0 | 0.0 | 10 |
| SCNA1.1.Disease | 0.0 | 100.0 | 22 |
| SCNA1.2.Disease | 18.2 | 81.8 | 11 |
| SCNA1.3.Disease | 0.0 | 100.0 | 3 |
| SCNA1.4.Disease | 0.0 | 100.0 | 11 |
| SCNAT.1.Disease | 100.0 | 0.0 | 23 |
| SCNAT.2.Disease | 54.5 | 45.5 | 11 |
| SCNAT.3.Disease | 100.0 | 0.0 | 11 |
| SCNAT.4.Disease | 26.1 | 73.9 | 23 |
| SCNAT.5.Disease | 100.0 | 0.0 | 1 |
| SCNAT.6.Disease | 0.0 | 100.0 | 1 |
| SODA4V.1.Disease | 100.0 | 0.0 | 17 |
| SODA4V.2.Disease | 100.0 | 0.0 | 11 |
| SODA4V.3.Disease | 100.0 | 0.0 | 11 |
| SODA4V.4.Disease | 100.0 | 0.0 | 11 |
| WT2.1.Healthy | 0.0 | 100.0 | 11 |
| WT2.2.Healthy | 14.3 | 85.7 | 7 |
| WT2.3.Healthy | 0.0 | 100.0 | 23 |
| WT2.4.Healthy | 0.0 | 100.0 | 11 |
| WT2.5.Healthy | 0.0 | 100.0 | 1 |
| WT2.6.Healthy | 0.0 | 100.0 | 1 |
## Registering fonts with R
## quartz_off_screen
## 2
## Reproducibility information
Sys.time()
## [1] "2018-07-17 09:00:34 EDT"
proc.time()
## user system elapsed
## 8.472 0.843 9.601
options(width = 120)
devtools::session_info()
## Session info ----------------------------------------------------------------------------------------------------------
## setting value
## version R version 3.5.0 (2018-04-23)
## system x86_64, darwin15.6.0
## ui X11
## language (EN)
## collate en_US.UTF-8
## tz America/New_York
## date 2018-07-17
## Packages --------------------------------------------------------------------------------------------------------------
## package * version date source
## abind 1.4-5 2016-07-21 cran (@1.4-5)
## acepack 1.4.1 2016-10-29 cran (@1.4.1)
## assertthat 0.2.0 2017-04-11 CRAN (R 3.5.0)
## backports 1.1.2 2017-12-13 CRAN (R 3.5.0)
## base * 3.5.0 2018-04-24 local
## base64enc 0.1-3 2015-07-28 CRAN (R 3.5.0)
## bindr 0.1.1 2018-03-13 CRAN (R 3.5.0)
## bindrcpp * 0.2.2 2018-03-29 CRAN (R 3.5.0)
## BiocStyle * 2.8.2 2018-05-30 Bioconductor
## bitops 1.0-6 2013-08-17 CRAN (R 3.5.0)
## bookdown 0.7 2018-02-18 CRAN (R 3.5.0)
## broom 0.4.4 2018-03-29 CRAN (R 3.5.0)
## ca 0.70 2016-12-14 cran (@0.70)
## car 3.0-0 2018-04-02 cran (@3.0-0)
## carData 3.0-1 2018-03-28 cran (@3.0-1)
## caTools 1.17.1 2014-09-10 CRAN (R 3.5.0)
## cellranger 1.1.0 2016-07-27 CRAN (R 3.5.0)
## checkmate 1.8.5 2017-10-24 cran (@1.8.5)
## class 7.3-14 2015-08-30 CRAN (R 3.5.0)
## cluster * 2.0.7-1 2018-04-13 CRAN (R 3.5.0)
## codetools 0.2-15 2016-10-05 CRAN (R 3.5.0)
## colorRamps 2.3 2012-10-29 cran (@2.3)
## colorspace 1.3-2 2016-12-14 CRAN (R 3.5.0)
## compiler 3.5.0 2018-04-24 local
## crosstalk 1.0.0 2016-12-21 CRAN (R 3.5.0)
## curl 3.2 2018-03-28 CRAN (R 3.5.0)
## d3vennR 0.1.1 2018-06-21 Github (Displayr/d3vennR@dceef8b)
## data.table 1.11.4 2018-05-27 CRAN (R 3.5.0)
## datasets * 3.5.0 2018-04-24 local
## devtools 1.13.5 2018-02-18 CRAN (R 3.5.0)
## digest 0.6.15 2018-01-28 CRAN (R 3.5.0)
## dplyr * 0.7.6 2018-06-29 CRAN (R 3.5.1)
## DT 0.2.10 2018-06-20 Github (rstudio/DT@bf60e43)
## dygraphs 1.1.1.4 2017-01-04 cran (@1.1.1.4)
## e1071 1.6-8 2017-02-02 cran (@1.6-8)
## effects 4.0-2 2018-06-19 cran (@4.0-2)
## evaluate 0.10.1 2017-06-24 CRAN (R 3.5.0)
## extrafont * 0.17 2014-12-08 CRAN (R 3.5.0)
## extrafontdb 1.0 2012-06-11 CRAN (R 3.5.0)
## flipAnalysisOfVariance 1.0.0 2018-06-21 Github (Displayr/flipAnalysisOfVariance@d2c0cb9)
## flipChartBasics 2.0.0 2018-06-21 Github (Displayr/flipChartBasics@1b60448)
## flipCluster * 1.1.0 2018-06-21 Github (Displayr/flipCluster@9728930)
## flipData 1.1.2 2018-06-21 Github (Displayr/flipData@5f176ca)
## flipFormat 1.0.3 2018-06-21 Github (Displayr/flipFormat@c9a8969)
## flipImputation 0.1.0 2018-06-21 Github (Displayr/flipImputation@910a61a)
## flipRegression 1.1.0 2018-06-21 Github (Displayr/flipRegression@57073c7)
## flipStandardCharts 1.0.5 2018-06-21 Github (Displayr/flipStandardCharts@e7b879a)
## flipStatistics 0.1.0 2018-06-21 Github (Displayr/flipStatistics@ef8e4ce)
## flipTables 2.5.0 2018-06-21 Github (Displayr/flipTables@84df199)
## flipTime 2.8.0 2018-06-21 Github (Displayr/flipTime@f77e1e0)
## flipTransformations 1.6.8 2018-06-21 Github (Displayr/flipTransformations@65dc935)
## flipU 1.2.3 2018-06-20 Github (Displayr/flipU@5f3a3ee)
## forcats 0.3.0 2018-02-19 CRAN (R 3.5.0)
## foreign 0.8-70 2017-11-28 CRAN (R 3.5.0)
## formattable 0.2.0.2 2018-06-20 Github (renkun-ken/formattable@39e1e01)
## Formula 1.2-3 2018-05-03 cran (@1.2-3)
## gdata 2.18.0 2017-06-06 CRAN (R 3.5.0)
## ggplot2 * 2.2.1.9000 2018-06-21 Github (tidyverse/ggplot2@1c09bae)
## glue 1.2.0 2017-10-29 CRAN (R 3.5.0)
## gplots * 3.0.1 2016-03-30 CRAN (R 3.5.0)
## graphics * 3.5.0 2018-04-24 local
## grDevices * 3.5.0 2018-04-24 local
## grid 3.5.0 2018-04-24 local
## gridExtra 2.3 2017-09-09 cran (@2.3)
## gtable 0.2.0 2016-02-26 CRAN (R 3.5.0)
## gtools 3.5.0 2015-05-29 CRAN (R 3.5.0)
## haven 1.1.1 2018-01-18 cran (@1.1.1)
## highr 0.7 2018-06-09 CRAN (R 3.5.0)
## Hmisc 4.1-1 2018-01-03 cran (@4.1-1)
## hms 0.4.2 2018-03-10 CRAN (R 3.5.0)
## hot.deck 1.1 2016-01-04 cran (@1.1)
## htmlTable 1.12 2018-05-26 cran (@1.12)
## htmltools 0.3.6 2017-04-28 CRAN (R 3.5.0)
## htmlwidgets 1.2 2018-04-19 CRAN (R 3.5.0)
## httpuv 1.4.3 2018-05-10 CRAN (R 3.5.0)
## httr 1.3.1 2017-08-20 CRAN (R 3.5.0)
## janitor * 1.0.0 2018-03-22 CRAN (R 3.5.0)
## jomo 2.6-2 2018-04-26 cran (@2.6-2)
## jsonlite 1.5 2017-06-01 CRAN (R 3.5.0)
## kableExtra * 0.9.0 2018-05-21 CRAN (R 3.5.0)
## KernSmooth 2.23-15 2015-06-29 CRAN (R 3.5.0)
## knitr * 1.20 2018-02-20 CRAN (R 3.5.0)
## labeling 0.3 2014-08-23 CRAN (R 3.5.0)
## later 0.7.3 2018-06-08 CRAN (R 3.5.0)
## lattice 0.20-35 2017-03-25 CRAN (R 3.5.0)
## latticeExtra 0.6-28 2016-02-09 cran (@0.6-28)
## lazyeval 0.2.1 2017-10-29 CRAN (R 3.5.0)
## leaflet 2.0.1 2018-06-04 cran (@2.0.1)
## lme4 1.1-17 2018-04-03 cran (@1.1-17)
## lmtest 0.9-36 2018-04-04 cran (@0.9-36)
## lubridate 1.7.4 2018-04-11 CRAN (R 3.5.0)
## magrittr 1.5 2014-11-22 CRAN (R 3.5.0)
## MASS 7.3-50 2018-04-30 CRAN (R 3.5.0)
## Matrix 1.2-14 2018-04-13 CRAN (R 3.5.0)
## memoise 1.1.0 2017-04-21 CRAN (R 3.5.0)
## methods * 3.5.0 2018-04-24 local
## mice 3.0.0 2018-05-25 cran (@3.0.0)
## mime 0.5 2016-07-07 CRAN (R 3.5.0)
## minqa 1.2.4 2014-10-09 cran (@1.2.4)
## mitml 0.3-5 2017-03-15 cran (@0.3-5)
## mnormt 1.5-5 2016-10-15 cran (@1.5-5)
## multcomp 1.4-8 2017-11-08 cran (@1.4-8)
## munsell 0.5.0 2018-06-12 CRAN (R 3.5.0)
## mvtnorm 1.0-8 2018-05-31 cran (@1.0-8)
## nlme 3.1-137 2018-04-07 CRAN (R 3.5.0)
## nloptr 1.0.4 2017-08-22 cran (@1.0.4)
## nnet 7.3-12 2016-02-02 CRAN (R 3.5.0)
## openxlsx 4.1.0 2018-05-26 cran (@4.1.0)
## pan 1.4 2016-02-10 cran (@1.4)
## parallel 3.5.0 2018-04-24 local
## pillar 1.2.3 2018-05-25 CRAN (R 3.5.0)
## pkgconfig 2.0.1 2017-03-21 CRAN (R 3.5.0)
## plotly * 4.7.1 2017-07-29 CRAN (R 3.5.0)
## plyr 1.8.4 2016-06-08 CRAN (R 3.5.0)
## promises 1.0.1 2018-04-13 CRAN (R 3.5.0)
## pryr 0.1.4 2018-02-18 cran (@0.1.4)
## psych 1.8.4 2018-05-06 cran (@1.8.4)
## purrr 0.2.5 2018-05-29 CRAN (R 3.5.0)
## R6 2.2.2 2017-06-17 CRAN (R 3.5.0)
## RColorBrewer * 1.1-2 2014-12-07 CRAN (R 3.5.0)
## Rcpp 0.12.17 2018-05-18 CRAN (R 3.5.0)
## readr 1.1.1 2017-05-16 CRAN (R 3.5.0)
## readxl * 1.1.0 2018-04-20 CRAN (R 3.5.0)
## reshape2 * 1.4.3 2017-12-11 CRAN (R 3.5.0)
## rhtmlDonut 0.1 2018-06-21 Github (Displayr/rhtmlDonut@755919d)
## rhtmlLabeledScatter 0.1.0 2018-06-21 Github (Displayr/rhtmlLabeledScatter@164a22c)
## rhtmlPalmTrees 0.1 2018-06-21 Github (Displayr/rhtmlPalmTrees@843a3ff)
## rhtmlPictographs 0.1.0 2018-06-21 Github (Displayr/rhtmlPictographs@04f887b)
## rio 0.5.10 2018-03-29 cran (@0.5.10)
## rlang 0.2.1 2018-05-30 CRAN (R 3.5.0)
## rmarkdown 1.10 2018-06-11 CRAN (R 3.5.0)
## rpart 4.1-13 2018-02-23 CRAN (R 3.5.0)
## rprojroot 1.3-2 2018-01-03 CRAN (R 3.5.0)
## rstudioapi 0.7 2017-09-07 CRAN (R 3.5.0)
## Rttf2pt1 1.3.7 2018-06-29 CRAN (R 3.5.0)
## rvest 0.3.2 2016-06-17 CRAN (R 3.5.0)
## sandwich 2.4-0 2017-07-26 cran (@2.4-0)
## scales 0.5.0 2017-08-24 CRAN (R 3.5.0)
## shiny 1.1.0 2018-05-17 CRAN (R 3.5.0)
## snakecase 0.9.1 2018-03-25 CRAN (R 3.5.0)
## sp 1.3-1 2018-06-05 cran (@1.3-1)
## sparkline 2.0 2016-11-12 cran (@2.0)
## splines 3.5.0 2018-04-24 local
## stats * 3.5.0 2018-04-24 local
## streamgraph 0.8.1 2018-06-21 Github (hrbrmstr/streamgraph@16aee37)
## stringi 1.2.3 2018-06-12 CRAN (R 3.5.0)
## stringr 1.3.1 2018-05-10 CRAN (R 3.5.0)
## survey 3.33-2 2018-03-13 cran (@3.33-2)
## survival 2.42-3 2018-04-16 CRAN (R 3.5.0)
## TH.data 1.0-8 2017-01-23 cran (@1.0-8)
## tibble 1.4.2 2018-01-22 CRAN (R 3.5.0)
## tidyr * 0.8.1 2018-05-18 CRAN (R 3.5.0)
## tidyselect 0.2.4 2018-02-26 CRAN (R 3.5.0)
## tools 3.5.0 2018-04-24 local
## utils * 3.5.0 2018-04-24 local
## viridisLite 0.3.0 2018-02-01 CRAN (R 3.5.0)
## withr 2.1.2 2018-03-15 CRAN (R 3.5.0)
## xfun 0.3 2018-07-06 CRAN (R 3.5.0)
## xml2 1.2.0 2018-01-24 CRAN (R 3.5.0)
## xtable 1.8-2 2016-02-05 CRAN (R 3.5.0)
## xts 0.10-2 2018-03-14 cran (@0.10-2)
## yaml 2.1.19 2018-05-01 CRAN (R 3.5.0)
## zip 1.0.0 2017-04-25 cran (@1.0.0)
## zoo 1.8-2 2018-06-11 CRAN (R 3.5.0)